
var exprData = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d/;
var exprVoto = /^[0-9]{2,3}\/[0-9]{2,3}$/;


/* -------------------------------------------------------------------------------
 *  Script che effettua i controlli sul form di Login
 *  ------------------------------------------------------------------------------*/
function checkLogin(form){
    input = form.getElementsByTagName("input");
    if(input[0].value == "" || input[1].value == ""){
      alert("Inserire sia email che password per il login");
      return false;
    }
    return true;
}

/* -------------------------------------------------------------------------------
 *  Questa funzione viene richiamata all'interno della pagina relativa alle
 *  LINGUE e ne controlla i campi opportuni
 * -------------------------------------------------------------------------------*/

function controlloLingue(form){

        select = form.getElementsByTagName("select");

        // controllo se è inserita almeno la madrelingua
        if(select[0].name == "madrelingua" && select[0].value == "Selezionare Lingua"){
            alert("Inserire la madrelingua");
            return false;
        }

        // ciclo su tutti gli input e select per controllare se qualcosa Ã¨ stato inserito

        x=1;
        numlingua = 0;
        while(x < select.length){
            vuoto = true;
            // ciclo sulle select dell' attuale lingua e controllo se Ã¨ stato inserito qualche valore

            for(y = x; y < x+6 && vuoto; y++){

                if(select[y].name == ("lingua"+numlingua) && select[y].value != "Selezionare Lingua"){
                    vuoto = false;
                }

                if(select[y].name == ("comprensioneAscolto"+numlingua) && select[y].value != "Livello"){
                    vuoto = false;
                }

                if(select[y].name == ("comprensioneLettura"+numlingua) && select[y].value != "Livello"){
                    vuoto = false;
                }

                if(select[y].name == ("parlatoIterazioneOrale"+numlingua) && select[y].value != "Livello"){
                    vuoto = false;
                }

                if(select[y].name == ("parlatoProduzioneOrale"+numlingua) && select[y].value != "Livello"){
                    vuoto = false;
                }

                if(select[y].name == ("scrittoProduzioneScritta"+numlingua) && select[y].value != "Livello"){
                    vuoto = false;
                }
            }
            // se c'Ã¨ almeno un campo nella riga che non si trova al suo valore base allora si effettua il controllo sulle select
            if(!vuoto){
                for(y = x; y < x+6; y++){
                    if(select[y].name == ("lingua"+numlingua) && select[y].value == "Selezionare Lingua"){
                        alert("Lingua #"+(numlingua+1)+":\nSelezionare una lingua.");
                        return false;
                    }

                    if(select[y].name == ("comprensioneAscolto"+numlingua) && select[y].value == "Livello"){
                        alert("Lingua #"+(numlingua+1)+":\nSelezionare il livello della comprensione dell'ascolto.");
                        return false;
                    }

                    if(select[y].name == ("comprensioneLettura"+numlingua) && select[y].value == "Livello"){
                        alert("Lingua #"+(numlingua+1)+":\nSelezionare il livello della comprensione della lettura.");
                        return false;
                    }

                    if(select[y].name == ("parlatoIterazioneOrale"+numlingua) && select[y].value == "Livello"){
                        alert("Lingua #"+(numlingua+1)+":\nSelezionare il livello nell'iterazione orale.");
                        return false;
                    }

                    if(select[y].name == ("parlatoProduzioneOrale"+numlingua) && select[y].value == "Livello"){
                        alert("Lingua #"+(numlingua+1)+":\nSelezionare il livello nella produzione orale.");
                        return false;
                    }

                    if(select[y].name == ("scrittoProduzioneScritta"+numlingua) && select[y].value == "Livello"){
                        alert("Lingua #"+(numlingua+1)+":\nSelezionare il livello nella produzione scritta.");
                        return false;
                    }
                }
            } // fine if controllo errore

            numlingua += 1;
            x += 6;
        }

     // chiusura ciclo sul fieldset
    return true;
}

/* -------------------------------------------------------------------------------
 *  Questa funzione viene richiamata all'interno della pagina relativa ai
 *  Titoli di studio per controllarne i campi
 * -------------------------------------------------------------------------------*/

function controlloTitoli(form){

    fieldset = form.getElementsByTagName("fieldset");
    for(i = 0; i < fieldset.length; i++){

        select = fieldset[i].getElementsByTagName("select");
        input = fieldset[i].getElementsByTagName("input");

        // Verifico se il fieldset Ã¨ vuoto controllando tutti i suoi input
        vuoto = true;

        if(vuoto){
            // ciclo su tutti gli input e select per controllare se qualcosa Ã¨ stato inserito
            for(x = 0; x < input.length && vuoto; x++){

                if(input[x].value != ""){
                    vuoto = false;
                }
            }
            if(select[0].value != "TITOLO DI STUDIO"){
                vuoto = false;
            }
        }

        // se l'attuale fieldset non Ã¨ vuoto allora controlla tutti i campi
        if(!vuoto){

            if(select[0].value == "TITOLO DI STUDIO"){
                alert("Titolo di Studio #"+(i+1)+":\nInserire correttamente il titolo di studio");
                return false;
            }

            for(y = 0; y < input.length; y++){

                if(input[y].name == ("settore"+i) && input[y].value == "" ){
                  alert("Titolo di Studio #"+(i+1)+":\nInserire il settore");
                  input[y].focus();
                  input[y].select();
                  return false;
                }

                if(input[y].name == ("nome"+i) && input[y].value == "" ){
                  alert("Titolo di Studio #"+(i+1)+":\nInserire il nome del titolo di studio");
                  input[y].focus();
                  input[y].select();
                  return false;
                }

                if(input[y].name == ("istituto"+i) && input[y].value == ""){
                  alert("Titolo di Studio #"+(i+1)+":\nInserire l'istituto erogante");
                  input[y].focus();
                  input[y].select();
                  return false;
                }

                if(input[y].name == ("dataConseguimento"+i) && input[y].value.search(exprData) < 0 ){
                  alert("Titolo di Studio #"+(i+1)+":\nInserire correttamente la data di conseguimento del titolo");
                  input[y].focus();
                  input[y].select();
                  return false;
                }

                if(input[y].name == ("voto"+i) && input[y].value.search(exprVoto) < 0 ){
                  alert("Titolo di Studio #"+(i+1)+":\nInserire correttamente il voto conseguito");
                  input[y].focus();
                  input[y].select();
                  return false;
                }
            } // chiusura ciclo sugli input
        } // chiusura if controlli sul fieldset riempito

    } // chiusura ciclo sul fieldset
    return true;
}

/* -------------------------------------------------------------------------------
 *  Questa funzione viene richiamata all'interno della pagina relativa alle
 *  Esperienze Lavorative per controllarne i campi
 * -------------------------------------------------------------------------------*/

function controlloEsperienzeLavorative(form){

    fieldset = form.getElementsByTagName("fieldset");
    for(i = 0; i < fieldset.length; i++){

        select = fieldset[i].getElementsByTagName("select");
        input = fieldset[i].getElementsByTagName("input");

        // Verifico se il fieldset Ã¨ vuoto controllando tutti i suoi input
        vuoto = true;

        if(vuoto){
            // il controllo sugli input di tipo radio viene saltato perchÃ¨ ce ne Ã¨ sempre uno checked
            for(x = 0; x < input.length && vuoto; x++){
                if(input[x].type == "radio"){
                    continue;
                }
                if(input[x].value != ""){
                    vuoto = false;
                }
            }
            if(select[0].value != "SETTORE LAVORATIVO"){
                vuoto = false;
            }
        }

        // se l'attuale fieldset non Ã¨ vuoto allora controlla tutti i campi
        if(!vuoto){

            if(select[0].value == "SETTORE LAVORATIVO"){
                alert("Esperienza lavorativa #"+(i+1)+":\nInserire correttamente il settore lavorativo");
                return false;
            }

            for(y = 0; y < input.length; y++){

                // se l'attuale input Ã¨ di tipo radio procedi alla prossima iterazione del for
                if(input[y].type == "radio"){
                    continue;
                }

                if(input[y].name == ("dataInizio"+i) && input[y].value.search(exprData) < 0 ){
                  alert("Esperienza lavorativa #"+(i+1)+":\nInserire correttamente la data di inizio dell'esperienza");
                  input[y].focus();
                  input[y].select();
                  return false;
                }

                if(input[y].name == ("dataFine"+i) && input[y].value.search(exprData) < 0 ){
                  alert("Esperienza lavorativa #"+(i+1)+":\nInserire correttamente la data di fine esperienza");
                  input[y].focus();
                  input[y].select();
                  return false;
                }

                if(input[y].name == ("datoreLavoro"+i) && input[y].value == ""){
                  alert("Esperienza lavorativa #"+(i+1)+":\nInserire il datore di lavoro");
                  input[y].focus();
                  input[y].select();
                  return false;
                }

                if(input[y].name == ("incarico"+i) && input[y].value == ""){
                  alert("Esperienza lavorativa #"+(i+1)+":\nInserire l'incarico");
                  input[y].focus();
                  input[y].select();
                  return false;
                }
            } // chiusura ciclo sugli input
        } // chiusura if controlli sul fieldset riempito

    } // chiusura ciclo sul fieldset
    return true;
}

/* -------------------------------------------------------------------------------
 *  Questa funzione viene richiamata all'interno della pagina relativa alle patenti
 * per controllarne i campi
 * -------------------------------------------------------------------------------*/

function controlloFormPatenti(form){

    fieldset = form.getElementsByTagName("fieldset");

    for(i = 0; i < fieldset.length; i++){

        select = fieldset[i].getElementsByTagName("select");
        input = fieldset[i].getElementsByTagName("input");
        // se si Ã¨ modificato uno dei valori che compongono i dati di una patente allora li controlla
        if(select[0].value != "PATENTE" || input[0].value != ""){

            // Controlla che la data inserita sia nel formato corretto
            if(input[0].value.search(exprData) < 0 ){
              alert("Inserire correttamente la data di rilascio della patente");
              input[0].focus();
              input[0].select();
              return false;
            }

            // Controlla che sia selezionata una patente
            if(select[0].value == "PATENTE"){
              alert("Selezionare una patente");
              return false;
            }
        }
    }
    return true;
}

/* -------------------------------------------------------------------------------
 *  Funzione che effettua i controlli su tutti i form del sito
 *  ------------------------------------------------------------------------------*/

function checkValueForm(form,action){

    /* se ho cliccato sui tasti per aggiungere un elemento o andare avanti nell'inserimento
     * salto tutti i controlli       */

    if(action == "avanti" || action == "aggiungi"){
        return true;
    }
    /* assegno alla variabile spans la lista di tutti gli elementi <span>
     * presenti all'interno del form            */
    spans = form.getElementsByTagName("span");

    /*Ciclo su ognuno di questi elementi per vedere se ha class=red
     *cosÃ¬ da identificare i punti del form dove sono presenti input obbligatori da riempire*/
    for(i = 0; i < spans.length;i++){

      if(spans[i].getAttribute("class") == "red"){
          /* trovato lo span con class=red risalgo al padre poichÃ¨ sÃ² che lo span Ã¨
           * contenuto dentro una <label>   */
          input = spans[i].parentNode;

          /*Ciclo attraversando i fratelli di <label> fino a trovare il primo
           *elemento di tipo <input> o <select> che Ã¨ quello che dovrÃ² controllare*/
          while( input.tagName != "INPUT" && input.tagName != "SELECT"){
              input = input.nextSibling;
          }
          // dopodichÃ¨ effettuo il controllo sul campo vuoto

          if(input.value == "" || input.value == "Provincia"){
            alert("I campi contrassegnati con * sono TUTTI obbligatori");
            input.focus();
            return false;
          }
      }
    }


    /* Ciclo su tutti gli elementi input per controllare la validitÃ  dei dati immessi */
    input = form.getElementsByTagName("input");
    for(i = 0; i < input.length;i++){


        // controllo la validitÃ  della mail inserita
        if(input[i].name == "email" && input[i].value.search(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i) < 0){
          alert("Inserire correttamente la mail");
          input[i].focus();
          input[i].select();
          return false;
        }
        //Controllo sulle password
        if(input[i].name == "pass") var password1 = input[i].value;

        if(input[i].name == "pass" && input[i].value.length < 6){
          alert("La password deve contenere almeno 6 caratteri");
          input[i].focus();
          input[i].select();
          return false;
        }

        if(input[i].name == "pass1" && input[i].value != password1){
          alert("Le due password devono combaciare.");
          input[i].focus();
          input[i].select();
          return false;
        }

        // Controllo del codice fiscale
        if(input[i].name == "cf" && input[i].value.search(/[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]/) < 0 ){
          alert("Inserire correttamente il codice fiscale.");
          input[i].focus();
          input[i].select();
          return false;
        }

        // Controllo della partita iva
        if(input[i].name == "pi" && input[i].value.search(/[0-9]{11}/) < 0 ){
          alert("Inserire correttamente la propria partita iva.");
          input[i].focus();
          input[i].select();
          return false;
        }

        // Controllo della data
        if(input[i].name == "dataDiNascita" && input[i].value.search(exprData) < 0 ){
          alert("Inserire correttamente la data");
          input[i].focus();
          input[i].select();
          return false;
        }
        // Controllo del CAP
        if(input[i].name == "cap" && input[i].value.search(/^\d{5}$/) < 0 ){
          alert("Inserire correttamente il CAP");
          input[i].focus();
          input[i].select();
          return false;
        }

        // Controllo del Numero di Telefono
        if(input[i].name == "telefono" && (input[i].value.search(/^[0-9]*$/) < 0) && (input[i].name != "")){
          alert("Inserire correttamente il telefono");
          input[i].focus();
          input[i].select();
          return false;
        }

        //chiamata al metodo per il controllo delle patenti
        if(input[i].name == "numPatenti"){return controlloFormPatenti(form);}

        //chiamata al metodo per il controllo delle esperienze lavorative
        if(input[i].name == "numEsperienze"){return controlloEsperienzeLavorative(form);}

        //chiamata al metodo per il controllo dei titoli di studio
        if(input[i].name == "numTitoli"){return controlloTitoli(form);}

        //chiamata al metodo per il controllo delle lingue
        if(input[i].name == "numLingue"){return controlloLingue(form);}

    }
    return true;
}

window.onload = function(){
    if ($("#autocomp")[0]!=null){
      setAutoComplete("ts", "results", "autoComplete","autocomp");
    }

    action = "";
    $("#Avanti").bind("click",function(event){action = "avanti";});
    $("#Aggiungi").bind("click",function(event){action = "aggiungi";});
    $("#formlogin").bind("submit",function(event){return checkLogin($("#formlogin")[0]);});
    $("form.form").bind("submit",function(event){return checkValueForm($("form.form")[0],action);});
}

